论文名称:DCT-Mask: Discrete Cosine Transform Mask Representation for Instance Segmentation
作者:Xing Shen, Jirui Yang, Chunbo Wei, Bing Deng, Jianqiang Huang, Xiansheng Hua, Xiaoliang Cheng, Kewei Liang
仓库地址:https://github.com/calmevtime/DCTNet
Binarygridmask 广泛用于实例分割。就例如 Mask R−CNN1,如下图所示,网络在 28×28 的网格中预测 Mask 。
但是一般来说,低分辨率的网格不足以捕捉细节,而高分辨率会大大增加训练的复杂性,为解决此问题,这篇论文提出一种新的 Mask 表达方式,利用离散余弦变换(DCT)将高分辨率的Binarygridmask编码成一个紧凑的向量,这种方法称为 DCT−Mask。
该方法可以非常容易集成到大多数基于像素的实例分割上。它不需要任何预处理或预训练,而且几乎对速度没有损害。
就如上图所示,Mask R−CNN 将 GT 采样到 28×28 ,然后上采样重构它,如下图所示,低分辨率的 Binarygridmask 不足以捕获细节特征,并在上采样过程中产生偏差。
如上图为使用 DCT 和未使用 DCT 方法的比较,左边为 GT ;之后是 Resize 后的 GT ;再是基于 Resize 后的重建图;最后是重建图与原来的GT图的误差值。
所以就算预测 Mask 是正确的,重建的 Mask 也有一定的系统误差。解决方式之一是提高 Binarygridmask 的分辨率,但是实验显示提高分辨率后平均精度(AP)比 28×28 要差,具体见下图。
Method
作者给出的方法是 DCT mask ,如下图是该 DCT mask 的 pipline。
该处理方式是受 JPEG 标准的启发,pipline 将二进制掩码转化为紧凑的向量。首先将 GT Resize到 K×K 大小,然后对其进行二维 DCT−II (假装是罗马 2)变换,在重构时利用二维逆 DCT 变换,最后利用双线性插值 Resize 到 H×W。数学表达如下(先看离散余弦变换):
设 BinarygridmaskMgt∈ RH×W。Resize 到MK×K∈ RK×K。文中K=128。二维DCT变换MDCT∈ RK×K 频率信号由如下公式得到:
MDCT(u,v)=K2C(u)C(v)x=0∑K−1y=0∑K−1MK×K(x,y)cos2K(2x+1)uπcos2K(2y+1)vπ 这里 C(ω)=1/2 当 ω=0 时当 ω 等于其他值时 C(ω)=1
因为 DCT 具有很强的能量聚集性,所以可以从 MDCT 经过 zig−zag 编码后得到向量选择第一个 N 维度的向量 V∈ RN (为什么是selectthefirstN−dimensionalvector?)
之后对该向量补零重构得到 MˉDCT∈ RK×K,下一步利用二维逆 DCT 变换
MˉK×K(x,y)=K2u=0∑K−1v=0∑K−1C(u)C(v)MˉDCT(u,v)cos2K(2x+1)uπcos2K(2y+1)vπ DCT-Mask in Mask R-CNN
如上图 DCT−Mask 在Mask R−CNN 的应用,在Maskhead 中使用 4 个卷积层,提取Mask 特征,然后用三个线性归回层回归DCT向量
则实际上变为回归问题,损失函数可构建为
Lmask=1obji∑ND(V^i,Vi) 这里 Vi,V^i 分别表示为第i个元素的GT与预测值。1obj 是样本中正样本指示函数,D 是第一范数距离矩阵。
如下图为对N的取值的探究
其中None表示为使用的二进制掩码。
Zig-Zag 编码
下图为Zig−Zag 编码方式
离散余弦变换 DCT
DCT 变换的全称是离散余弦变换(DiscreteCosineTransform),主要用于将数据或图像的压缩,能够将空域的信号转换到频域上,具有良好的去相关性的性能。
在详细说明 DCT 公式之前需要对 DFT 有所了解。
X[k]=n=0∑N−1x[n](cos(N2πkn)−jsin(N2πkn)) 将上面式子拆开来
X[k]=n=0∑N−1x[n](cosN2πkn)−jn=0∑N−1x[n]sin(N2πkn) 可以看到 DFT 变化结果,实数部分由n=0∑N−1x[n](cosN2πkn) 组成,而虚数部分由jn=0∑N−1x[n]sin(N2πkn)组成,设cos(N2πkn)=cos(kt),那 DFT 公式可以写为:
实数部分:
Re[k]=n=0∑N−1x[n]cos(kt) 虚数部分:
Im[k]=n=0∑N−1x[n]sin(kt) 显然,cos 是一个偶函数,sin 是一个奇函数,因此
Re[k]=Re[−k],Im[k]=−Im[k] 所以当 x[n] 是一个实数函数时,其频率的实部是偶函数,虚部是一个奇函数。
那当原信号 x[n] 是一个全是实数的偶函数信号,x[n]sinkt 就变成一个奇函数,奇函数那么自然
Im[k]=n=0∑N−1x[n]sin(kt)=0 因此,当原时域信号是一个实偶信号时,我们就可以把 DFT 写成
X[k]=n=0∑N−1x[n](cosN2πkn) 以上就是 DCT 变换的核心思想,当然这与实际的 DCT 公式还是有差距的。
先来看最常用的 DCT 变换公式
F(u)=c(u)x=0∑N−1f(x)cos[N(x+0.5)πu] 其中当 u=0 时 c(0)=N1 否则 c(u)=N2
可以看到与我们上面推导的内容还是有很大不一样的,这是因为在实际应用中没有刚刚好的实偶函数信号给我们,既然没有,我们就构造一个实信号。
设一长度为 N 的实数离散信号 x[0],x[1],⋯,x[N−1] 。首先,我们先将这个信号长度扩大成原来的两倍,并变成 2N ,定义新信号 x′[m] 为
x′[m]=x[m](0≤m≤N−1)x′[m]=x[−m−1](−N≤m≤−1) 可视化一下:
其中红色为原始信号,红色为延拓后的信号,这样我们就将一个实信号变成了一个实偶信号,显然信号的区间已经变化为 [−N,N−1]
但是这样插值之后也随之带来问题,这个信号并不关于 m=0 偶对称,所以为了让信号关于原点对称,把整个延拓信号向右平移 21 个单位
因此上面 DFT 公式变化为
X[k]=m=−N+21∑N−21x′[m−21]e2N−j2πmk 根据欧拉公式对上式展开,展开时我们只要实数部分就行了
X[k]=m=−N+21∑N−21x′[m−21]e2N−j2πmk=m=−N+21∑N−21x′[m−21]cos(2N2πmk) 但是这样是不科学的,因为m是带小数甚至负数的,因为在离散信号中找不到这样的信号。因此我们需要变形,我们知道这个序列是偶对称序列,因此
m=−N+21∑N−21x′[m−21]cos(2N2πmk)=2×m=21∑N−21x′[m−21]cos(2N2πmk) 于是设n=m−21,代入上式
2×n=0∑N−1x′[n]cos(2N2π(n+21)k)=2×n=0∑N−1x′[n]cos(N(n+21)πk) 关于 DCT 中 c(u) 是怎么来的,c(u) 在函数计算中,加不加都无所谓,但实际上,这个值因为一些工程上的意义,在 DFT 中也常常出现N1 这主要是为了在 DFT 变换变成矩阵运算的形式时,将该矩阵正交化,所以这里的c(u)也同样。c(u)=2N1 将该系数乘入上面式子
2N1×2×n=0∑N−1x′[n]cos(N(n+21)πk)=N2×n=0∑N−1x′[n]cos(N(n+21)πk) 于是我们便得到 DCT 式子
分析能量聚集性
上面推导了 DCT 公式,这里尝试对其能量聚集性进行解释。
回想我们如何得到傅里叶变换公式,我们先对原信号进行周期延拓,而在DCT中我们先对信号进行镜像延拓,如上面的图可以看出DFT直接进行周期变换会造成跳变,对应与频率里的高频。而DCT对信号进行镜像,其过度更加平滑,同时会弱化高频信号(高频决定细节,低频决定轮廓)。而根本原因是对一般的周期函数展开成 fourier 级数的性质问题,这里不在深入探究。
References